home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / dev / gcc / libnixV1_0.lha / gnu / libnix-sources.lha / sources / headers / regparm.h < prev    next >
C/C++ Source or Header  |  1995-01-22  |  1KB  |  32 lines

  1. #define ___PUSH(a) "movel\t" #a ",sp@-\n"
  2. #define ___POP(a)  "movel\tsp@+," #a "\n"
  3.  
  4. #ifndef SMALL_DATA
  5.  
  6. #define __REGP(functype,funcname,pushlist,popval) \
  7. asm(".even\n" ".globl _" #funcname "\n" "_" #funcname ":\n" \
  8. pushlist "jbsr\t___" #funcname "\n" "addqw\t#" #popval ",sp\n" \
  9. "rts\n"); functype __##funcname
  10.  
  11. #else
  12.  
  13. #define __REGP(functype,funcname,pushlist,popval) \
  14. asm(".even\n" ".globl _" #funcname "\n" "_" #funcname ":\n" ___PUSH(a4) \
  15. pushlist "jbsr\t_geta4\n" "jbsr\t___" #funcname "\n" "addqw\t#" #popval ",sp\n" \
  16. ___POP(a4) "rts\n"); functype __##funcname
  17.  
  18. #endif
  19.  
  20. #define REGPARM1(functype,funcname,a1,r1) \
  21. __REGP(functype,funcname,___PUSH(r1),4) (a1)
  22.  
  23. #define REGPARM2(functype,funcname,a1,r1,a2,r2) \
  24. __REGP(functype,funcname,___PUSH(r2)___PUSH(r1),8) (a1,a2)
  25.  
  26. #define REGPARM3(functype,funcname,a1,r1,a2,r2,a3,r3) \
  27. __REGP(functype,funcname,___PUSH(r3)___PUSH(r2)___PUSH(r1),12) (a1,a2,a3)
  28.  
  29. #define REGPARM4(functype,funcname,a1,r1,a2,r2,a3,r3,a4,r4) \
  30. __REGP(functype,funcname,___PUSH(r4)___PUSH(r3)___PUSH(r2)___PUSH(r1),16) (a1,a2,a3,a4)
  31.  
  32.